import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import viteCompression from 'vite-plugin-compression'
import { Plugin as importToCDN } from 'vite-plugin-cdn-import'
import { visualizer } from 'rollup-plugin-visualizer'
import { resolve } from 'path'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueJsx(),
    viteCompression({
      threshold: 10 * 1024 // 开启gzip，单位是b
    }),
    importToCDN({
      modules: ['vue', 'axios']
    }),
    visualizer({
      open: true //在默认用户代理中打开生成的文件
    })
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  },
  // 服务端渲染
  server: {
    host: '0.0.0.0',
    // 本地跨域代理 https://cn.vitejs.dev/config/server-options.html#server-proxy
    proxy: {}
  },
  build: {
    //不生成源代码映射文件
    sourcemap: false,
    // 消除打包大小超过500kb警告
    // chunkSizeWarningLimit: 4000,
    outDir: `dist/${new Date()
      .toLocaleString('zh', { hour12: false })
      .replace(/(.*)[\/-](.*)[\/-](.*)\s(.*):(.*):(.*)/g, '$1年$2月$3日$4时$5分$6秒')}`,
    emptyOutDir: false, // 设置为 false，不清空输出目录
    rollupOptions: {
      input: {
        index: resolve(__dirname, 'index.html')
      },
      // 静态资源分类打包
      output: {
        chunkFileNames: 'static/js/[name]-[hash].js',
        entryFileNames: 'static/js/[name]-[hash].js',
        assetFileNames: 'static/[ext]/[name]-[hash].[ext]'
      }
    }
  }
})
